跳到主要内容

数据库(Database)

数据库(Database)是逻辑层面上,抽象层次最高的管理单元,在我们部署安装 PostgreSQL 的时候,安装程序将会为我们默认创建一个名为 postgres 的初始工作数据库(这也是为什么我们使用 psql 连接 PostgreSQL 时,-d 的参数设置为 postgres 的原因)与两个模板数据库:

  • template1
    template1 数据库是所有新的数据库创建的依据,如果我们对 template1 数据库的内容进行了修订与调整,那么未来在创建新的数据库的时候,新数据库将会默认带有我们对 template1 所做的修改。
  • template0
    template0 数据库代表着 PostgreSQL 默认数据库的最初内容,即完全没有任何数据,它是为我们在破坏性修改 template1 数据库后所做的“安全阀”,任何情况下我们都不应该对 template0 数据库进行修改。

罗列现有的数据库

假定我们已经使用 psql 连接到了 PostgreSQL 上面,使用下面的指令可以帮助我们罗列出现有的数据库来:

# 使用 psql 内置指令
\l
# 使用 SQL 语句自 PostgreSQL 系统表中查询
SELECT * FROM pg_database;
提示

PostgreSQL 的配置数据基本都可以在系统表中查询得到
除了极少数参数之外,PostgreSQL 绝大部分的配置数据均可以在系统表中查询得到,并进行修改,这种catalog-driven(基于数据表驱动)的工作作风带来了极大的灵活性。

连接或者切换到某个数据库

我们可以尝试使用 psql 工具连接到这两个数据库上面,参考如下代码

# 连接到 template1 数据库上面
psql -d template1
# 如果已经连接到了某一个数据库,可以在 psql 中使用 \c 进行切换
\c template1

创建一个新数据库

如果我们希望创建一个新的数据库,可以通过 createdb 工具或者在 psql 中使用 CREATE DATABASE 语句,假定我们要创建的数据库名为 postgresql,参考如下:

# 使用 createdb 程序
createdb postgresql
# 使用 psql 程序连接到 PostgreSQL,执行
CREATE DATABASE postgresql;
提示

创建数据库时请确保 template1 数据库没有被任何客户端连接
PostgreSQL 在创建新数据库的时候,假如此时有其它客户端正在连接 template1,因为无法对模板数据库的内容进行拷贝,新数据库的创建工作将会宣告失败,并将得到诸如下面的错误提示:
source database "template1" is being accessed by other users.

删除一个数据库

如果我们希望删除一个既有的数据库,可以通过 dropdb 工具,或者在 psql 工具中使用 DROP DATABASE 语句,假定要删除的数据库为 postgresql,参考如下:

# 使用 dropdb 程序
dropdb postgresql
# 使用 psql 连接到 PostgreSQL,然后执行
DROP DATABASE postgresql;